Managed code is code executing under the control of a managed runtime environment (MRTE) (e.g., any code written in C# (“C-sharp”) from Microsoft® or Visual Basic .NET), whereas unmanaged code is code executing outside of the MRTE (e.g., COM components and WIN32 API functions). Typically, managed code may be used to support components and applications during runtime, and unmanaged code may be used to support low-level interaction with the platform (i.e., the processor). As applications migrate toward operability on MRTEs such as Java® Virtual Machine (JVM) and Common Language Runtime (CLR) provided by Microsoft® .NET, virtual machines are abstracting the applications away from processors (i.e., managed runtime applications are becoming more dependent on the virtual machines and less dependent on the processors).
Currently, unmanaged software library functions such as Intel® Integrated Performance Primitives (IPP) are generally optimized for execution in unmanaged environments on processors implemented using one or more of the Intel® Pentium® technology and/or the Intel® Itanium® technology. The unmanaged software library functions may be further optimized to operate on a specific processor architecture by writing custom hand optimization code with processor-specific instructions such as a Streaming Single Instruction/Multiple Data (SIMD) Extension (SSE) instruction, an SSE2 instruction, and/or a MultiMedia Extension (MMX) instruction offered by Intel® processors. For example, a String Compare function may be implemented in unmanaged code and optimized by custom hand optimization coding using the SSE2 instruction. In contrast to unmanaged code, managed code may not be optimized for particular processor architectures in the same way as unmanaged code because no mechanism exists to custom hand optimize managed code. For example, typically, managed APIs are solely dependent on a just-in-time (JIT) compiler for optimization. As a result, managed runtime applications are unable to take advantage of processor-specific optimizing instructions for execution on an underlying processor to enable and optimize features such as audio processing, video processing, image processing, speech recognition, cryptography, etc.